package mytest.com.myapplication;

import android.content.Context;

import javax.inject.Singleton;

import dagger.Module;
import dagger.Provides;

/**
 * Created by 王家宝 on 2017/11/6.
 * Email:639586819@qq.com
 * Tel:18241150668
 */

/**
 * 一、使用@Module增加一个SaladModule类，用于管理所有依赖
 */
@Module
public class AnimalsMoudle {
    private Context mContext;

    public AnimalsMoudle(Context context) {
        this.mContext = context;
    }

    /*使用@Provides，为每一个依赖写一个provideXxx方法*/
    /*2.0 添加@Singleton，实现单例*/
    @Singleton
    @Provides
    public Cat provideCat() {
        return new Cat();
    }

    @Provides
    public Dog provideDog() {
        return new Dog();
    }

    /*以下是一个构造方法带参数的类*/
    @Provides
    public Orange provideOrange(Knife knife, Context context) {
        return new Orange(knife, context);
    }

    @Provides
    public Context provideContext() {
        return mContext;
    }

    /*   因为MainActivity所依赖的Orange又依赖了Knife，所以这里也要把Knife管理起来
         同理，如果这个Knife还依赖了别的类，也要在这里引入*/
    @Provides
    public Knife provideKnife() {
        return new Knife();
    }


    @Type("normal")
    @Provides
    public Milk provideNormalMilk() {
        return new Milk();
    }

    @Type("custmize")
    @Provides
    public Milk provideCusMilk(String s) {
        return new Milk(s);
    }

    @Provides
    public String provideString() {
        return "abc";
    }


}
